package com.eliaukjq.xunlianying;

import java.util.concurrent.TimeUnit;

/**
 * @Author : 佩萁
 * Description :
 * @Create : 2024/7/10 - 10:40
 */
/**
 * VolatileExample 类用于演示 volatile 变量的使用和效果。
 * 它通过一个线程不断检查共享变量 stop 的值，来展示 volatile 变量在多线程通信中的作用。
 */
public class VolatileExample {
    // 使用 volatile 关键字标记 stop 变量，确保多线程环境下的可见性
    private static boolean stop = false;

    /**
     * 程序入口点。
     * 主线程启动一个子线程，子线程不断循环直到 stop 变量为 true。
     * 主线程在一段时间后将 stop 变量设置为 true，以结束子线程的循环。
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 启动子线程 Thread A
        new Thread("Thread A") {
            @Override
            public void run() {
                // 循环直到 stop 变量为 true
                while (!stop) {

                }
                // 输出线程结束信息
                System.out.println("3:" + Thread.currentThread().getName() + "停止了");
            }
        }.start();

        // 主线程暂停1秒
        try {
            TimeUnit.SECONDS.sleep(1);
            System.out.println("1:主线程等待一秒。。。");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 主线程设置 stop 变量为 true，以结束子线程的循环
        System.out.println("2:将stop变量设置为true");
        stop = true;
    }
}
